import time
from PyQt5 import QtCore
from PyQt5.QtWidgets import QMessageBox
from output.progress import Ui_progress_MainWindow
import os, csv
from database import usedb

class progresbar_window(Ui_progress_MainWindow):
    def __init__(self):
        # 构造方法
        super(progresbar_window, self).__init__()
        # 只显示关闭按钮
        self.setupUi(self)
        self.setWindowFlags(QtCore.Qt.WindowCloseButtonHint)
        self.show()
        self.pbtn_OK.clicked.connect(self.output_pic)
        self.pbtn_quit.clicked.connect(self.close)
    def output_pic(self):
        # 添加信号槽,点击“确定”执行导出图片操作
        dir_proj = os.path.join(usedb.cur_path, usedb.cur_proj)
        csv_piletotal = os.path.join(dir_proj, f'{usedb.cur_proj}汇总信息表（表二）.csv')
        dir_images = os.path.join(dir_proj, 'images')

        if os.path.exists(csv_piletotal) and os.path.exists(dir_images):
            # 验证汇总信息表二和图片文件夹是否存在。存在则取得表二中桩号列表，不存在报错退出。
            with open(csv_piletotal, 'r', newline='', encoding='utf-8') as csvfile:
                #获取全部桩号列表
                csvoutput = csv.reader(csvfile)
                projinfohead = next(csvoutput)
                # 获取桩号列表
                pilenums = []
                for row in csvoutput:
                    pilenum=row[1]
                    pilenums.append(pilenum)
        else:
            QMessageBox.warning(None,'warning!',f'项目文件夹{dir_proj}或图片文件夹{dir_images}不存在',QMessageBox.Ok)
            self.close()
            return 0

        img_path_jpgs = []
        for i in range(0,len(pilenums)):
            # 验证表二桩号列表对应的图片是否都在images文件夹内，不存在报错退出。
            img_path_jpg=os.path.join(dir_images,f'{pilenums[i]}.jpg')
            img_path_jpgs.append(img_path_jpg)
            if os.path.exists(img_path_jpg):
                pass
            else:
                QMessageBox.warning(None, 'warning!', f'图片{img_path_jpg}不存在',QMessageBox.Ok)
                return 0
        #导出图片到word
        doc_path=os.path.join(dir_proj,f'{usedb.cur_proj}图片.docx')
        from docx import Document
        from docx.shared import Inches
        num=len(pilenums)
        if num!=0:
            document=Document()
            #创建表格
            if num%2==1:
                #取余为1，为奇数，为0为偶数.
                #奇数桩，表格行数为num+1
                #偶数桩，表格行数为num
                rows=num+1
            elif num%2==0:
                rows=num
            else:
                print('无法获得该数的奇偶性！')
            column=2
            table=document.add_table(rows=rows,cols=column)
            table.style='TableGrid'
            #添加图片和文字
            # 取余为1，为奇数，为0为偶数.
            # 奇数桩，图片单元格(i+1,0),文字单元格（i+2,0）
            # 偶数桩，图片单元格(i,1),文字单元格（i+1,1）
            for i in range(0,num):
                if (i+1)%2==1:
                    #取余为1，为奇数，为0为偶数.
                    #奇数桩，图片单元格(i,0),文字单元格（i+1,0）
                    #偶数桩，图片单元格(i-1,1),文字单元格（i,1）
                    cell=table.cell(i,0)
                    run=cell.add_paragraph().add_run()
                    run.add_picture(img_path_jpgs[i], width=Inches(3))
                    table.cell(i+1,0).text=f'{i+1}、{pilenums[i]}芯样照片图'
                elif (i+1)%2==0:
                    cell=table.cell(i-1, 1)
                    run = cell.add_paragraph().add_run()
                    run.add_picture(img_path_jpgs[i], width=Inches(3))
                    table.cell(i, 1).text = f'{i + 1}、{pilenums[i]}芯样照片图'
                self.lcd.display(i+1)
                self.label.setText(f'共{num}根桩')
                self.progress.setValue(int((i+1)/num*100))
                if i==num-1:
                    QMessageBox.information(None, '成功', '图片导出完成', QMessageBox.Ok)
                    document.save(doc_path)
                time.sleep(0.2)
        else:
            QMessageBox.warning(None, 'no pile!', 'no pile!', QMessageBox.Ok)